]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
windowManager: Split out workspace insertion from thumbnails
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 15 Jan 2015 22:03:24 +0000 (23:03 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Fri, 16 Jan 2015 18:28:56 +0000 (19:28 +0100)
We will soon allow to insert a new workspace by other means than
DND in between workspace thumbnails, so move the relevant code
to a new windowManager method.

https://bugzilla.gnome.org/show_bug.cgi?id=665764

js/ui/windowManager.js
js/ui/workspaceThumbnail.js

index 65ec623c97ebeda4057d7cfb8e5ad150b51c3847..70d723c199ce1d254d0b6e20d02248e0360c37cb 100644 (file)
@@ -888,6 +888,31 @@ const WindowManager = new Lang.Class({
         Main.activateWindow(nextWindow);
     },
 
+    insertWorkspace: function(pos) {
+        if (!Meta.prefs_get_dynamic_workspaces())
+            return;
+
+        let windows = global.get_window_actors().map(function(winActor) {
+            return winActor.meta_window;
+        });
+
+        // To create a new workspace, we slide all the windows on workspaces
+        // below us to the next workspace, leaving a blank workspace for us
+        // to recycle.
+        windows.forEach(function(window) {
+            // If the window is attached to an ancestor, we don't need/want
+            // to move it
+            if (window.get_transient_for() != null)
+                return;
+            // Windows on workspaces below pos don't need moving
+            let index = window.get_workspace().index();
+            if (index < pos)
+                return;
+            window.change_workspace_by_index(index + 1, true);
+        });
+    },
+
+
     keepWorkspaceAlive: function(workspace, duration) {
         if (!this._workspaceTracker)
             return;
index 3adc327114cbb5ae55d94e6c122661604568a136..df8bc55633d355401b6657736dd8324574f4fcb2 100644 (file)
@@ -795,35 +795,13 @@ const ThumbnailsBox = new Lang.Class({
 
             let isWindow = !!source.realWindow;
 
-            // To create a new workspace, we first slide all the windows on workspaces
-            // below us to the next workspace, leaving a blank workspace for us to recycle.
             let newWorkspaceIndex;
             [newWorkspaceIndex, this._dropPlaceholderPos] = [this._dropPlaceholderPos, -1];
-
-            // Nab all the windows below us.
-            let windows = global.get_window_actors().filter(function(winActor) {
-                // If the window is attached to an ancestor, we don't need/want to move it
-                let window = winActor.meta_window;
-
-                if (window.get_transient_for() != null)
-                    return false;
-
-                if (isWindow)
-                    return window.get_workspace().index() >= newWorkspaceIndex && winActor != source;
-                else
-                    return window.get_workspace().index() >= newWorkspaceIndex;
-            });
-
             this._spliceIndex = newWorkspaceIndex;
 
-            // ... move them down one.
-            windows.forEach(function(winActor) {
-                let window = winActor.meta_window;
-                window.change_workspace_by_index(window.get_workspace().index() + 1, true);
-            });
+            Main.wm.insertWorkspace(newWorkspaceIndex);
 
             if (isWindow) {
-                // ... and bam, a workspace, good as new.
                 // Move the window to our monitor first if necessary.
                 let thumbMonitor = this._thumbnails[newWorkspaceIndex].monitorIndex;
                 if (source.metaWindow.get_monitor() != thumbMonitor)